#include "ModuleVideoWritter.h"

////////////////////////////////////////////////////////////////////////////////
void ModuleVideoWritter::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();

	l_path=new QLineEdit(win);
	pb_browse=new QPushButton("...",win);

	layout=new QHBoxLayout(win);
	layout->addWidget(l_path);
	layout->addWidget(pb_browse);

	connect(pb_browse,SIGNAL(clicked()),this,SLOT(s_browse()));
	
	videofile=NULL;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleVideoWritter::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleVideoWritter::process()
{
	if(videofile!=NULL && previous_path!=l_path->text())
	{
		delete videofile;	
		videofile=NULL;	
	}

	if(videofile==NULL && !l_path->text().isEmpty())
	{				
		previous_path=l_path->text();		
		if(frame.channels()>1)
		{videofile=new cv::VideoWriter(previous_path.toAscii().data(),0,25,frame.size(),true);}
		else
		{videofile=new cv::VideoWriter(previous_path.toAscii().data(),0,25,frame.size(),false);}
	}
	
	if(videofile!=NULL && videofile->isOpened())
	{
		if(frame.channels()>1)cv::cvtColor(frame,frame,CV_RGB2BGR);
		(*videofile)<<frame;
	}
}
////////////////////////////////////////////////////////////////////////////////
void ModuleVideoWritter::setInput(int n,const cv::Mat & m)
{
	frame=m.clone();
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleVideoWritter::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleVideoWritter::getName()
{
	return tr("Video Writter");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleVideoWritter::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleVideoWritter::help(int id)
{
	if(id==-2)
	{
		return trUtf8("Module d'enregistrement de données");
	}
	else if (id==-1)
	{
		return tr("none");
	}
	else if (id==0)
	{
		return tr("image");
	}
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleVideoWritter::setParams(QString params)
{
	l_path->setText(params);
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleVideoWritter::getParams()
{
	return l_path->text();
}
////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleVideoWritter::clone()
{
	return new ModuleVideoWritter;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleVideoWritter::s_browse()
{
	
	QString path = QFileDialog::getSaveFileName(NULL, tr("Storage Data File"),"data",tr("Video (*.avi)"));
	
	if(!path.isEmpty())	
	{
		if(path.split(".").size()!=2)
		path=path+tr(".avi");
		l_path->setText(path);
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleVideoWritter_plugin,ModuleVideoWritter);
